package Fisica.Venta;

import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import Fisica.Conexion;
import Logica.Util;
import Logica.Cooperativa.Operador;
import Logica.Venta.Articulo;
import Logica.Venta.Venta;

public class FisicaVenta {
	public static Venta insertarVenta(Venta v){
		String SELECT = "select * from capturador_ventas "
				+ "where numero_venta = '"+v.getNumeroVenta()+"' "
					+ "and fecha = '"+Util.getDate(v.getFecha())+"' "
					+ "and vendedor_id = "+v.getVendedor()+";";
		
		String INSERTAR = "INSERT INTO capturador_ventas (fecha, numero_venta, vendedor_id) "
				+ "VALUES ('"+Util.getDate(v.getFecha())+"', "+v.getNumeroVenta()+", "+v.getVendedor()+");";
		
		try {			
			PreparedStatement st;
			ResultSet rs;
			//INSERTO
			st = Conexion.getConexion().prepareStatement(INSERTAR);				
			st.executeUpdate();
			//RECUPERO
			st = Conexion.getConexion().prepareStatement(SELECT);
			rs = st.executeQuery();
			if(rs.next())
				v.setId(rs.getInt("id_cv"));
			System.out.println("inserto: "+v.getNumeroVenta());

			return v;
			
		}catch(Exception e){
			System.out.println("exception al intentar insertar: "+v.getNumeroVenta());
			e.printStackTrace();
		}
		return null;
			
	}
	
	public static Venta insertarVentaHistorica(Venta v){
		String SELECT = "select * from capturador_ventas "
				+ "where id_cv = '"+v.getId()+"' and fecha = '"+Util.getFechaActual()+"';";
		
		String INSERTAR = "INSERT INTO capturador_ventas_historico "
				+ "select * from capturador_ventas "
				+ "where id_cv = '"+v.getId()+"' and fecha = '"+Util.getFechaActual()+"';";
		
		String DELETE ="delete capturador_ventas "
				+ "where id_cv = '"+v.getId()+"' and fecha = '"+Util.getFechaActual()+"';";
		
		try {			
			PreparedStatement st;
			ResultSet rs;
			//INSERTO
			st = Conexion.getConexion().prepareStatement(SELECT);
			rs = st.executeQuery();
			if(rs.next()){
				st = Conexion.getConexion().prepareStatement(INSERTAR);				
				st.executeUpdate();
				st = Conexion.getConexion().prepareStatement(DELETE);				
				st.executeUpdate();
			}
						
			System.out.println("inserto: "+v.getNumeroVenta());

			return v;
			
		}catch(Exception e){
			System.out.println("exception al intentar insertar: "+v.getNumeroVenta());
			e.printStackTrace();
		}
		return null;
			
	}
	
	public static boolean delete (Venta v){
		String delete = "delete from capturador_ventas where id_cv = "+v.getId()+" and fecha = '"+Util.getDate(v.getFecha())+"';";
		String select = "select * from capturador_ventas where id_cv = "+v.getId()+" and fecha = '"+Util.getDate(v.getFecha())+"';";
		try {			
			PreparedStatement st;
			ResultSet rs;
			st = Conexion.getConexion().prepareStatement(delete);	
			st.executeUpdate();
			
			st = Conexion.getConexion().prepareStatement(select);	
			rs = st.executeQuery();
			
			System.out.println("inserto: "+v.getNumeroVenta());

			return !rs.next();
			
		}catch(Exception e){
			System.out.println("exception al intentar insertar: "+v.getNumeroVenta());
			e.printStackTrace();
		}
		return false;
	}
	
	public static List<Venta> listVenta (){
		List<Venta> lista = new ArrayList();	
		String sql = "select * from capturador_ventas where fecha = '"+Util.getFechaActual()+"';";
		try {
			PreparedStatement st = Conexion.getConexion().prepareStatement(sql);	
			ResultSet rs = st.executeQuery();			
			
			while (rs.next()){
				Venta o = new Venta(); 
				o.setId(rs.getInt(1)); 				
				o.setFecha(rs.getDate(2));				
				o.setNumeroVenta(rs.getInt(3));					
				o.setVendedor(rs.getInt(4));			 	
				
				lista.add(o);
				}			
		} catch (SQLException e) {
			System.out.print("ERROR EN LA RECUPERACION DE DATOS DE LA BASE");
			e.printStackTrace();
		} 		
		return lista;		
	}

	public static Venta get(int id){
		String sql = "select * from capturador_ventas where id_cv = "+id+" and fecha = '"+Util.getFechaActual()+"';";
		try {
			PreparedStatement st = Conexion.getConexion().prepareStatement(sql);	
			ResultSet rs = st.executeQuery();			
			
			if (rs.next()){
				Venta o = new Venta(); 
				o.setId(rs.getInt("id_cv")); 				System.out.print("codigo: "+o.getId());
				o.setFecha(rs.getDate("fecha"));				System.out.print(", apellido: "+o.getFecha());
				o.setNumeroVenta(rs.getInt("numero_venta"));					System.out.print(", categoria: "+o.getNumeroVenta());
				o.setVendedor(rs.getInt("vendedor_id"));			 	System.out.print(", clave: "+o.getVendedor());
				return o;
				}			
		} catch (SQLException e) {
			System.out.print("ERROR EN LA RECUPERACION DE DATOS DE LA BASE");
			e.printStackTrace();
		} 		
		return new Venta();	
	}
	
//	public static Venta get(int ticket, int cantidad){
//		String sql = "select * from capturador_ventas where numero_venta = "+id+" and fecha = '"+Util.getFechaActual()+"';";
//		try {
//			PreparedStatement st = Conexion.getConexion().prepareStatement(sql);	
//			ResultSet rs = st.executeQuery();			
//			
//			if (rs.next()){
//				Venta o = new Venta(); 
//				o.setId(rs.getInt("id_cv")); 				System.out.print("codigo: "+o.getId());
//				o.setFecha(rs.getDate("fecha"));				System.out.print(", apellido: "+o.getFecha());
//				o.setNumeroVenta(rs.getInt("numero_venta"));					System.out.print(", categoria: "+o.getNumeroVenta());
//				o.setVendedor(rs.getInt("vendedor_id"));			 	System.out.print(", clave: "+o.getVendedor());
//				return o;
//				}			
//		} catch (SQLException e) {
//			System.out.print("ERROR EN LA RECUPERACION DE DATOS DE LA BASE");
//			e.printStackTrace();
//		} 		
//		return new Venta();	
//	}
	
	public static void limpiarTablas() {
		String hoy = Util.getFechaActual();
		String deleteVenta = "delete from capturador_ventas where  fecha < '"+hoy+"';";
		String deleteLista = "delete from capturador_venta_listado where id_cv IN (select id_cv from capturador_ventas where fecha < '"+hoy+"');";
		try {			
			PreparedStatement st;
			ResultSet rs;
			st = Conexion.getConexion().prepareStatement(deleteLista);	
			st.executeUpdate();
			
			st = Conexion.getConexion().prepareStatement(deleteVenta);	
			st.executeUpdate();
									
		}catch(Exception e){
			e.printStackTrace();
		}
		
	}
}
